00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef EAX_H_INCLUDED
00010 #define EAX_H_INCLUDED
00011
00012 #ifdef __cplusplus
00013 extern "C" {
00014 #endif // __cplusplus
00015
00016 #ifndef OPENAL
00017 #include <dsound.h>
00018
00019
00020
00021 DEFINE_GUID(CLSID_EAXDirectSound,
00022 0x4ff53b81,
00023 0x1ce0,
00024 0x11d3,
00025 0xaa, 0xb8, 0x0, 0xa0, 0xc9, 0x59, 0x49, 0xd5);
00026
00027
00028
00029
00030 DEFINE_GUID(CLSID_EAXDirectSound8,
00031 0xca503b60,
00032 0xb176,
00033 0x11d4,
00034 0xa0, 0x94, 0xd0, 0xc0, 0xbf, 0x3a, 0x56, 0xc);
00035
00036 #ifdef DIRECTSOUND_VERSION
00037 #if DIRECTSOUND_VERSION == 0x0800
00038 __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate8(GUID*, LPDIRECTSOUND8*, IUnknown FAR *);
00039 typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE8)(GUID*, LPDIRECTSOUND8*, IUnknown FAR*);
00040 #endif
00041 #endif
00042
00043 __declspec(dllimport) HRESULT WINAPI EAXDirectSoundCreate(GUID*, LPDIRECTSOUND*, IUnknown FAR *);
00044 typedef HRESULT (FAR PASCAL *LPEAXDIRECTSOUNDCREATE)(GUID*, LPDIRECTSOUND*, IUnknown FAR*);
00045
00046 #else
00047 #include <al.h>
00048
00049 #ifndef GUID_DEFINED
00050 #define GUID_DEFINED
00051 typedef struct _GUID
00052 {
00053 unsigned long Data1;
00054 unsigned short Data2;
00055 unsigned short Data3;
00056 unsigned char Data4[8];
00057 } GUID;
00058 #endif // !GUID_DEFINED
00059
00060 #ifndef DEFINE_GUID
00061 #ifndef INITGUID
00062 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
00063 extern const GUID FAR name
00064 #else
00065 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
00066 extern const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
00067 #endif // INITGUID
00068 #endif // DEFINE_GUID
00069
00070
00071
00072
00073 typedef ALenum (*EAXSet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
00074 typedef ALenum (*EAXGet)(const GUID*, ALuint, ALuint, ALvoid*, ALuint);
00075 #endif
00076
00077 #pragma pack(push, 4)
00078
00079
00080
00081
00082 DEFINE_GUID(DSPROPSETID_EAX20_ListenerProperties,
00083 0x306a6a8,
00084 0xb224,
00085 0x11d2,
00086 0x99, 0xe5, 0x0, 0x0, 0xe8, 0xd8, 0xc7, 0x22);
00087
00088
00089 #define DSPROPSETID_EAX_ListenerProperties DSPROPSETID_EAX20_ListenerProperties
00090 #define DSPROPSETID_EAX_SourceProperties DSPROPSETID_EAX20_BufferProperties
00091
00092 typedef enum
00093 {
00094 DSPROPERTY_EAXLISTENER_NONE,
00095 DSPROPERTY_EAXLISTENER_ALLPARAMETERS,
00096 DSPROPERTY_EAXLISTENER_ROOM,
00097 DSPROPERTY_EAXLISTENER_ROOMHF,
00098 DSPROPERTY_EAXLISTENER_ROOMROLLOFFFACTOR,
00099 DSPROPERTY_EAXLISTENER_DECAYTIME,
00100 DSPROPERTY_EAXLISTENER_DECAYHFRATIO,
00101 DSPROPERTY_EAXLISTENER_REFLECTIONS,
00102 DSPROPERTY_EAXLISTENER_REFLECTIONSDELAY,
00103 DSPROPERTY_EAXLISTENER_REVERB,
00104 DSPROPERTY_EAXLISTENER_REVERBDELAY,
00105 DSPROPERTY_EAXLISTENER_ENVIRONMENT,
00106 DSPROPERTY_EAXLISTENER_ENVIRONMENTSIZE,
00107 DSPROPERTY_EAXLISTENER_ENVIRONMENTDIFFUSION,
00108 DSPROPERTY_EAXLISTENER_AIRABSORPTIONHF,
00109 DSPROPERTY_EAXLISTENER_FLAGS
00110 } DSPROPERTY_EAX_LISTENERPROPERTY;
00111
00112
00113 #define DSPROPERTY_EAXLISTENER_IMMEDIATE 0x00000000 // changes take effect immediately
00114 #define DSPROPERTY_EAXLISTENER_DEFERRED 0x80000000 // changes take effect later
00115 #define DSPROPERTY_EAXLISTENER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXLISTENER_NONE | \
00116 DSPROPERTY_EAXLISTENER_IMMEDIATE)
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134 typedef struct _EAXLISTENERPROPERTIES
00135 {
00136 long lRoom;
00137 long lRoomHF;
00138 float flRoomRolloffFactor;
00139 float flDecayTime;
00140 float flDecayHFRatio;
00141 long lReflections;
00142 float flReflectionsDelay;
00143 long lReverb;
00144 float flReverbDelay;
00145 unsigned long dwEnvironment;
00146 float flEnvironmentSize;
00147 float flEnvironmentDiffusion;
00148 float flAirAbsorptionHF;
00149 unsigned long dwFlags;
00150 } EAXLISTENERPROPERTIES, *LPEAXLISTENERPROPERTIES;
00151
00152
00153 enum
00154 {
00155 EAX_ENVIRONMENT_GENERIC,
00156 EAX_ENVIRONMENT_PADDEDCELL,
00157 EAX_ENVIRONMENT_ROOM,
00158 EAX_ENVIRONMENT_BATHROOM,
00159 EAX_ENVIRONMENT_LIVINGROOM,
00160 EAX_ENVIRONMENT_STONEROOM,
00161 EAX_ENVIRONMENT_AUDITORIUM,
00162 EAX_ENVIRONMENT_CONCERTHALL,
00163 EAX_ENVIRONMENT_CAVE,
00164 EAX_ENVIRONMENT_ARENA,
00165 EAX_ENVIRONMENT_HANGAR,
00166 EAX_ENVIRONMENT_CARPETEDHALLWAY,
00167 EAX_ENVIRONMENT_HALLWAY,
00168 EAX_ENVIRONMENT_STONECORRIDOR,
00169 EAX_ENVIRONMENT_ALLEY,
00170 EAX_ENVIRONMENT_FOREST,
00171 EAX_ENVIRONMENT_CITY,
00172 EAX_ENVIRONMENT_MOUNTAINS,
00173 EAX_ENVIRONMENT_QUARRY,
00174 EAX_ENVIRONMENT_PLAIN,
00175 EAX_ENVIRONMENT_PARKINGLOT,
00176 EAX_ENVIRONMENT_SEWERPIPE,
00177 EAX_ENVIRONMENT_UNDERWATER,
00178 EAX_ENVIRONMENT_DRUGGED,
00179 EAX_ENVIRONMENT_DIZZY,
00180 EAX_ENVIRONMENT_PSYCHOTIC,
00181
00182 EAX_ENVIRONMENT_COUNT
00183 };
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194 #define EAXLISTENERFLAGS_DECAYTIMESCALE 0x00000001 // reverberation decay time
00195 #define EAXLISTENERFLAGS_REFLECTIONSSCALE 0x00000002 // reflection level
00196 #define EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE 0x00000004 // initial reflection delay time
00197 #define EAXLISTENERFLAGS_REVERBSCALE 0x00000008 // reflections level
00198 #define EAXLISTENERFLAGS_REVERBDELAYSCALE 0x00000010 // late reverberation delay time
00199
00200
00201 #define EAXLISTENERFLAGS_DECAYHFLIMIT 0x00000020
00202
00203 #define EAXLISTENERFLAGS_RESERVED 0xFFFFFFC0 // reserved future use
00204
00205
00206
00207 #define EAXLISTENER_MINROOM (-10000)
00208 #define EAXLISTENER_MAXROOM 0
00209 #define EAXLISTENER_DEFAULTROOM (-1000)
00210
00211 #define EAXLISTENER_MINROOMHF (-10000)
00212 #define EAXLISTENER_MAXROOMHF 0
00213 #define EAXLISTENER_DEFAULTROOMHF (-100)
00214
00215 #define EAXLISTENER_MINROOMROLLOFFFACTOR 0.0f
00216 #define EAXLISTENER_MAXROOMROLLOFFFACTOR 10.0f
00217 #define EAXLISTENER_DEFAULTROOMROLLOFFFACTOR 0.0f
00218
00219 #define EAXLISTENER_MINDECAYTIME 0.1f
00220 #define EAXLISTENER_MAXDECAYTIME 20.0f
00221 #define EAXLISTENER_DEFAULTDECAYTIME 1.49f
00222
00223 #define EAXLISTENER_MINDECAYHFRATIO 0.1f
00224 #define EAXLISTENER_MAXDECAYHFRATIO 2.0f
00225 #define EAXLISTENER_DEFAULTDECAYHFRATIO 0.83f
00226
00227 #define EAXLISTENER_MINREFLECTIONS (-10000)
00228 #define EAXLISTENER_MAXREFLECTIONS 1000
00229 #define EAXLISTENER_DEFAULTREFLECTIONS (-2602)
00230
00231 #define EAXLISTENER_MINREFLECTIONSDELAY 0.0f
00232 #define EAXLISTENER_MAXREFLECTIONSDELAY 0.3f
00233 #define EAXLISTENER_DEFAULTREFLECTIONSDELAY 0.007f
00234
00235 #define EAXLISTENER_MINREVERB (-10000)
00236 #define EAXLISTENER_MAXREVERB 2000
00237 #define EAXLISTENER_DEFAULTREVERB 200
00238
00239 #define EAXLISTENER_MINREVERBDELAY 0.0f
00240 #define EAXLISTENER_MAXREVERBDELAY 0.1f
00241 #define EAXLISTENER_DEFAULTREVERBDELAY 0.011f
00242
00243 #define EAXLISTENER_MINENVIRONMENT 0
00244 #define EAXLISTENER_MAXENVIRONMENT (EAX_ENVIRONMENT_COUNT-1)
00245 #define EAXLISTENER_DEFAULTENVIRONMENT EAX_ENVIRONMENT_GENERIC
00246
00247 #define EAXLISTENER_MINENVIRONMENTSIZE 1.0f
00248 #define EAXLISTENER_MAXENVIRONMENTSIZE 100.0f
00249 #define EAXLISTENER_DEFAULTENVIRONMENTSIZE 7.5f
00250
00251 #define EAXLISTENER_MINENVIRONMENTDIFFUSION 0.0f
00252 #define EAXLISTENER_MAXENVIRONMENTDIFFUSION 1.0f
00253 #define EAXLISTENER_DEFAULTENVIRONMENTDIFFUSION 1.0f
00254
00255 #define EAXLISTENER_MINAIRABSORPTIONHF (-100.0f)
00256 #define EAXLISTENER_MAXAIRABSORPTIONHF 0.0f
00257 #define EAXLISTENER_DEFAULTAIRABSORPTIONHF (-5.0f)
00258
00259 #define EAXLISTENER_DEFAULTFLAGS (EAXLISTENERFLAGS_DECAYTIMESCALE | \
00260 EAXLISTENERFLAGS_REFLECTIONSSCALE | \
00261 EAXLISTENERFLAGS_REFLECTIONSDELAYSCALE | \
00262 EAXLISTENERFLAGS_REVERBSCALE | \
00263 EAXLISTENERFLAGS_REVERBDELAYSCALE | \
00264 EAXLISTENERFLAGS_DECAYHFLIMIT)
00265
00266
00267
00268
00269
00270
00271 DEFINE_GUID(DSPROPSETID_EAX20_BufferProperties,
00272 0x306a6a7,
00273 0xb224,
00274 0x11d2,
00275 0x99, 0xe5, 0x0, 0x0, 0xe8, 0xd8, 0xc7, 0x22);
00276
00277
00278 #define DSPROPSETID_EAX_BufferProperties DSPROPSETID_EAX20_BufferProperties
00279
00280 typedef enum
00281 {
00282 DSPROPERTY_EAXBUFFER_NONE,
00283 DSPROPERTY_EAXBUFFER_ALLPARAMETERS,
00284 DSPROPERTY_EAXBUFFER_DIRECT,
00285 DSPROPERTY_EAXBUFFER_DIRECTHF,
00286 DSPROPERTY_EAXBUFFER_ROOM,
00287 DSPROPERTY_EAXBUFFER_ROOMHF,
00288 DSPROPERTY_EAXBUFFER_ROOMROLLOFFFACTOR,
00289 DSPROPERTY_EAXBUFFER_OBSTRUCTION,
00290 DSPROPERTY_EAXBUFFER_OBSTRUCTIONLFRATIO,
00291 DSPROPERTY_EAXBUFFER_OCCLUSION,
00292 DSPROPERTY_EAXBUFFER_OCCLUSIONLFRATIO,
00293 DSPROPERTY_EAXBUFFER_OCCLUSIONROOMRATIO,
00294 DSPROPERTY_EAXBUFFER_OUTSIDEVOLUMEHF,
00295 DSPROPERTY_EAXBUFFER_AIRABSORPTIONFACTOR,
00296 DSPROPERTY_EAXBUFFER_FLAGS
00297 } DSPROPERTY_EAX_BUFFERPROPERTY;
00298
00299
00300 #define DSPROPERTY_EAXBUFFER_IMMEDIATE 0x00000000 // changes take effect immediately
00301 #define DSPROPERTY_EAXBUFFER_DEFERRED 0x80000000 // changes take effect later
00302 #define DSPROPERTY_EAXBUFFER_COMMITDEFERREDSETTINGS (DSPROPERTY_EAXBUFFER_NONE | \
00303 DSPROPERTY_EAXBUFFER_IMMEDIATE)
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317 typedef struct _EAXBUFFERPROPERTIES
00318 {
00319 long lDirect;
00320 long lDirectHF;
00321 long lRoom;
00322 long lRoomHF;
00323 float flRoomRolloffFactor;
00324 long lObstruction;
00325 float flObstructionLFRatio;
00326 long lOcclusion;
00327 float flOcclusionLFRatio;
00328 float flOcclusionRoomRatio;
00329 long lOutsideVolumeHF;
00330 float flAirAbsorptionFactor;
00331 unsigned long dwFlags;
00332 } EAXBUFFERPROPERTIES, *LPEAXBUFFERPROPERTIES;
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344 #define EAXBUFFERFLAGS_DIRECTHFAUTO 0x00000001 // affects DSPROPERTY_EAXBUFFER_DIRECTHF
00345 #define EAXBUFFERFLAGS_ROOMAUTO 0x00000002 // affects DSPROPERTY_EAXBUFFER_ROOM
00346 #define EAXBUFFERFLAGS_ROOMHFAUTO 0x00000004 // affects DSPROPERTY_EAXBUFFER_ROOMHF
00347
00348 #define EAXBUFFERFLAGS_RESERVED 0xFFFFFFF8 // reserved future use
00349
00350
00351
00352 #define EAXBUFFER_MINDIRECT (-10000)
00353 #define EAXBUFFER_MAXDIRECT 1000
00354 #define EAXBUFFER_DEFAULTDIRECT 0
00355
00356 #define EAXBUFFER_MINDIRECTHF (-10000)
00357 #define EAXBUFFER_MAXDIRECTHF 0
00358 #define EAXBUFFER_DEFAULTDIRECTHF 0
00359
00360 #define EAXBUFFER_MINROOM (-10000)
00361 #define EAXBUFFER_MAXROOM 1000
00362 #define EAXBUFFER_DEFAULTROOM 0
00363
00364 #define EAXBUFFER_MINROOMHF (-10000)
00365 #define EAXBUFFER_MAXROOMHF 0
00366 #define EAXBUFFER_DEFAULTROOMHF 0
00367
00368 #define EAXBUFFER_MINROOMROLLOFFFACTOR 0.0f
00369 #define EAXBUFFER_MAXROOMROLLOFFFACTOR 10.f
00370 #define EAXBUFFER_DEFAULTROOMROLLOFFFACTOR 0.0f
00371
00372 #define EAXBUFFER_MINOBSTRUCTION (-10000)
00373 #define EAXBUFFER_MAXOBSTRUCTION 0
00374 #define EAXBUFFER_DEFAULTOBSTRUCTION 0
00375
00376 #define EAXBUFFER_MINOBSTRUCTIONLFRATIO 0.0f
00377 #define EAXBUFFER_MAXOBSTRUCTIONLFRATIO 1.0f
00378 #define EAXBUFFER_DEFAULTOBSTRUCTIONLFRATIO 0.0f
00379
00380 #define EAXBUFFER_MINOCCLUSION (-10000)
00381 #define EAXBUFFER_MAXOCCLUSION 0
00382 #define EAXBUFFER_DEFAULTOCCLUSION 0
00383
00384 #define EAXBUFFER_MINOCCLUSIONLFRATIO 0.0f
00385 #define EAXBUFFER_MAXOCCLUSIONLFRATIO 1.0f
00386 #define EAXBUFFER_DEFAULTOCCLUSIONLFRATIO 0.25f
00387
00388 #define EAXBUFFER_MINOCCLUSIONROOMRATIO 0.0f
00389 #define EAXBUFFER_MAXOCCLUSIONROOMRATIO 10.0f
00390 #define EAXBUFFER_DEFAULTOCCLUSIONROOMRATIO 0.5f
00391
00392 #define EAXBUFFER_MINOUTSIDEVOLUMEHF (-10000)
00393 #define EAXBUFFER_MAXOUTSIDEVOLUMEHF 0
00394 #define EAXBUFFER_DEFAULTOUTSIDEVOLUMEHF 0
00395
00396 #define EAXBUFFER_MINAIRABSORPTIONFACTOR 0.0f
00397 #define EAXBUFFER_MAXAIRABSORPTIONFACTOR 10.0f
00398 #define EAXBUFFER_DEFAULTAIRABSORPTIONFACTOR 1.0f
00399
00400 #define EAXBUFFER_DEFAULTFLAGS (EAXBUFFERFLAGS_DIRECTHFAUTO | \
00401 EAXBUFFERFLAGS_ROOMAUTO | \
00402 EAXBUFFERFLAGS_ROOMHFAUTO)
00403
00404
00405
00406
00407
00408
00409
00410
00411 #define EAX_MATERIAL_SINGLEWINDOW (-2800)
00412 #define EAX_MATERIAL_SINGLEWINDOWLF 0.71f
00413 #define EAX_MATERIAL_SINGLEWINDOWROOMRATIO 0.43f
00414
00415
00416 #define EAX_MATERIAL_DOUBLEWINDOW (-5000)
00417 #define EAX_MATERIAL_DOUBLEWINDOWHF 0.40f
00418 #define EAX_MATERIAL_DOUBLEWINDOWROOMRATIO 0.24f
00419
00420
00421 #define EAX_MATERIAL_THINDOOR (-1800)
00422 #define EAX_MATERIAL_THINDOORLF 0.66f
00423 #define EAX_MATERIAL_THINDOORROOMRATIO 0.66f
00424
00425
00426 #define EAX_MATERIAL_THICKDOOR (-4400)
00427 #define EAX_MATERIAL_THICKDOORLF 0.64f
00428 #define EAX_MATERIAL_THICKDOORROOMRTATION 0.27f
00429
00430
00431 #define EAX_MATERIAL_WOODWALL (-4000)
00432 #define EAX_MATERIAL_WOODWALLLF 0.50f
00433 #define EAX_MATERIAL_WOODWALLROOMRATIO 0.30f
00434
00435
00436 #define EAX_MATERIAL_BRICKWALL (-5000)
00437 #define EAX_MATERIAL_BRICKWALLLF 0.60f
00438 #define EAX_MATERIAL_BRICKWALLROOMRATIO 0.24f
00439
00440
00441 #define EAX_MATERIAL_STONEWALL (-6000)
00442 #define EAX_MATERIAL_STONEWALLLF 0.68f
00443 #define EAX_MATERIAL_STONEWALLROOMRATIO 0.20f
00444
00445
00446 #define EAX_MATERIAL_CURTAIN (-1200)
00447 #define EAX_MATERIAL_CURTAINLF 0.15f
00448 #define EAX_MATERIAL_CURTAINROOMRATIO 1.00f
00449
00450
00451 #pragma pack(pop)
00452
00453 #ifdef __cplusplus
00454 }
00455 #endif // __cplusplus
00456
00457 #endif